Skip to content

ci: wire the DEV-2203 suites — post-deploy smoke, weekly canary, monthly matrix - #189

Merged
danielzytohoc merged 15 commits into
masterfrom
chore/DEV-2203-wire-workflows
Aug 19, 2026
Merged

ci: wire the DEV-2203 suites — post-deploy smoke, weekly canary, monthly matrix#189
danielzytohoc merged 15 commits into
masterfrom
chore/DEV-2203-wire-workflows

Conversation

@danielzytohoc

@danielzytohoc danielzytohoc commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Last in the DEV-2203 stack — now also carries the deploy-first master pipeline (Dan's #184 post-merge review). Stacked on #187; merge the remaining chain bottom-up (#185#186#187 → this).

Master pipeline: deploy first, verify production after

changes ─┬─► deploy-authoring ─┐
         └─► deploy-api ───────┴─► smoke (@smoke e2e against prod)
  • No test gate before the deploys. The full suite runs on every PR; each deploy job runs its own pnpm build (a broken build never reaches wrangler); what a master push needs verified is production, which only exists after the deploy — the @smoke subset (one render per engine, share fixture, docs example, one Style round-trip, ~1 container) is that verification.
  • ⚠️ One repo setting to click: branch protection → Require branches to be up to date before merging on master. That makes PR CI results exact for the merged tree and is the compensating control for merge skew now that master doesn't re-run the suite.

The rest (unchanged from previous revisions)

  • e2e-live.yml rewrite: manual dispatch (inputs base_url, ai, pkg_pr_new_ref), weekly Monday 05:00 UTC prod canary (AI on), workflow_call smoke mode; folds in the three orphaned live specs; container steps strictly --workers=1; the authed-share step turns a rotten E2E_BROKER_TOKEN into a ::warning, never a red run, and scrubs traces so the JWT can't reach public artifacts.
  • Monthly starter matrix (1st, 03:00 UTC — two hours clear of the Monday canary).
  • All Bugbot findings addressed (JWT-in-artifacts, cron collision, cancel-stranded containers, multi-commit push range).

Notes

  • First canary may be red on DEV-2547 unless DEV-2541 also fixed the starters — the run itself will answer that.
  • Before trusting the cron: one manual dispatch against prod with ai: true.

Note

Medium Risk
Changes production deploy gating (no pre-deploy full CI on master) and adds scheduled live E2E against prod and real containers; mitigated by PR CI, deploy self-builds, and a focused post-deploy smoke subset.

Overview
Master pushes no longer re-run the full PR CI suite. master.yml drops the test job that called ci.yml; deploy jobs only need changes, and a new smoke job calls e2e-live.yml with smoke: true against prod after at least one deploy succeeds. Merge-skew is expected to be handled by branch protection (“require branches to be up to date”), not a second full suite on master.

e2e-live.yml becomes the hub for live E2E: weekly Monday prod canary (AI on), workflow_call for post-deploy @smoke, and richer manual dispatch (ai, pkg_pr_new_ref). Full runs split into parallel Sandpack/API-read specs vs container suites at --workers=1, plus optional broker-gated authed share (token validation → skip/warn, no traces on that step) and AI checks.

e2e-starter-matrix.yml adds a monthly cron (1st at 03:00 UTC) with prod as default E2E_BASE_URL when inputs are empty.

share-create-live.spec.ts recovers the minted demo id from the dialog client link when the POST response listener misses, so afterEach revoke still runs.

Docs in ci.yml, AGENTS.md, and workflow comments are updated to match deploy-first + PR-only full CI.

Reviewed by Cursor Bugbot for commit 1c5c441. Bugbot is set up for automated code reviews on this repo. Configure here.

…hly matrix

e2e-live.yml grows three ways in: the manual dispatch it always had (now
with ai and pkg_pr_new_ref inputs), a weekly Monday prod canary for
external drift (the hosted bundler, npm, the broker, docs-bucket rot —
deploy breakage is caught at deploy time, so daily would only buy
triage), and a workflow_call smoke mode both deploy workflows now invoke
after their curl checks: the @smoke subset, one container, minutes.

The full deployed run folds in the specs nothing ever ran (row-striping,
preview-recovery's live half, import-live) plus the DEV-2203 additions,
split by what they hold: the sandpack/API-read step runs parallel, the
container step strictly --workers=1 against the global pool of five, the
authed share round-trip treats a rotten E2E_BROKER_TOKEN as a notice
rather than a red run, and the AI step runs on the canary or by asking.

e2e-starter-matrix.yml gains the monthly sweep (1st, 05:00 UTC) — the
only coverage of the full starters × majors surface, at a cadence
matched to npm-release timescales. Concurrency keeps deployed runs
uncancellable so no run ever strands container sessions.
Comment thread .github/workflows/e2e-live.yml
Comment thread .github/workflows/deploy-runner-authoring.yml Outdated
Dan Zyto added 2 commits August 17, 2026 08:37
The post-deploy smoke boots a live-preview container; an unconditional
cancel-in-progress killed the whole run — smoke included — on the next
push to master, stranding that session in the global Sandbox pool
(cleanup lives in a finally a cancellation never reaches). Deploys now
queue, matching deploy-runner-api.yml.

The other #189 finding — e2e-live listing style-panel.spec.ts before it
existed on this branch — is resolved by linearising the stack: the spec
now sits in this branch's ancestry (185 → 186 → 187 → here).
Comment thread .github/workflows/e2e-live.yml
Comment thread .github/workflows/e2e-live.yml
Dan Zyto added 2 commits August 17, 2026 08:45
…ugbot #189)

The authed-share step puts a live session JWT in sessionStorage and an
Authorization header; a Playwright trace records both, GitHub does not
redact secrets inside artifact zips, and this repo is public — so a
failed canary would have published a valid @handsontable.com session
for seven days. That step now runs with --trace off --retries=0 and
scrubs test-results/ and playwright-report/ before the on-failure
upload can see them (|| status capture: Actions runs bash -e, so a
plain $? after a failing command is unreachable).

The monthly starter matrix moves to 03:00 on the 1st: at 05:00 a
Monday-the-1st would start it alongside the weekly canary, and matrix
--workers=2 plus the canary's serialized container suite against the
same global pool of five is exactly the contention both workflow
headers warn about.
…to master.yml

#184 replaced the two deploy-runner-*.yml workflows with the master.yml
orchestrator, so this branch's smoke jobs — appended to those deleted
files — become one smoke job in the orchestrator instead: the @smoke
subset runs once after whichever deploys fired, rather than once per
deploy workflow. AGENTS.md's table merges both descriptions.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ef126e9. Configure here.

Comment thread .github/workflows/e2e-live.yml
…rkflows

# Conflicts:
#	.github/workflows/e2e-live.yml
@danielzytohoc
danielzytohoc requested a review from demtario August 18, 2026 09:19
Dan Zyto added 7 commits August 18, 2026 17:31
…iew)

The test gate before the deploys is gone: the full suite runs on every
PR, each deploy job runs its own pnpm build (a broken build cannot reach
wrangler), and what a master push needs verified is production — which
only exists after the deploy. The @smoke e2e subset is that
verification, and the weekly canary covers the rest. Re-running unit on
every merge bought nothing the PR run had not already proven.

The compensating control for merge skew (a PR tested before master
moved) is branch protection's 'require branches to be up to date' — a
repo setting, recommended in the PR body, not a workflow job.
The wire capture is un-awaited and its json read best-effort — if it
lost the race, a demo existed (the dialog was showing its link) while
afterEach saw null and skipped the revoke. The dialog link's id is now
the recovery path: demoId ??= linkId before any assertion can throw,
and the two sources are asserted to agree when both answered.
Base automatically changed from feat/DEV-2203-ai-live-spec to master August 19, 2026 10:42
@danielzytohoc
danielzytohoc merged commit 920077a into master Aug 19, 2026
7 checks passed
@danielzytohoc
danielzytohoc deleted the chore/DEV-2203-wire-workflows branch August 19, 2026 10:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants